home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 47215 / 47215.xpi / components / sharedObject.js next >
Text File  |  2009-11-22  |  4KB  |  138 lines

  1. /* 
  2.     SHARES OBJECTS BETWEEN WINDOWS OF THE SAME BROWSER INSTANCE FOR N ADD-ONS 
  3.     Roberto bouzout (tito) <extensiondevelopment@gmail.com>
  4. */
  5.  
  6. /*https://developer.mozilla.org/en/How_to_Build_an_XPCOM_Component_in_Javascript*/
  7. /***********************************************************
  8. constants
  9. ***********************************************************/
  10.  
  11. // reference to the interface defined in nsISharedObject.idl
  12. const nsISharedObject = Components.interfaces.nsISharedObject;
  13.  
  14. // reference to the required base interface that all components must support
  15. const nsISupports = Components.interfaces.nsISupports;
  16.  
  17. // UUID uniquely identifying our component
  18. // You can get from: http://kruithof.xs4all.nl/uuid/uuidgen here
  19. const CLASS_ID = Components.ID("{205bf060-c5f1-11de-8a39-0800200c9a66}");
  20.  
  21. // description
  22. const CLASS_NAME = "Shares objects of N add-ons between windows of the same browser instance";
  23.  
  24. // textual unique identifier
  25. const CONTRACT_ID = "@particle.universe.tito/SharedObject;1";
  26.  
  27. /***********************************************************
  28. class definition
  29. ***********************************************************/
  30.  
  31. //class constructor
  32. function SharedObject() {
  33. // If you only need to access your component from Javascript, uncomment the following line:
  34. this.wrappedJSObject = this;
  35. }
  36.  
  37. // class definition
  38. SharedObject.prototype = 
  39. {
  40.     //our array that will store the shared variables
  41.     s : [],
  42.     //appends a var to the array 's' (store)
  43.     sharedObjectSet: function(aName,aValue)
  44.     {
  45.         this.s[aName] = aValue;
  46.     },
  47.     //gets a var from the array 's' (store)
  48.     sharedObjectGet: function(aName)
  49.     {
  50.         return this.s[aName];
  51.     },
  52.     //sets to null the array in the position aName
  53.     sharedObjectDestroy: function(aName)
  54.     {
  55.         /* 
  56.             CAUTION THIS WILL DESTROY THE OBJECT INSIDE THE XPCOM COMPONENT 
  57.             BUT THE REFERENCE (if any) ON YOUR EXTENSION WILL REMAIN INTACT
  58.         */
  59.         this.s[aName] = null;
  60.         delete(this.s[aName]);
  61.     },
  62.     //returns true if the object aName exists in 's' (store)
  63.     sharedObjectExists: function(aName)
  64.     {
  65.         if(!this.s[aName])
  66.             return false;
  67.         else
  68.             return true;
  69.     },
  70.  
  71.   QueryInterface: function(aIID)
  72.   {
  73.     if (!aIID.equals(nsISharedObject) &&    
  74.         !aIID.equals(nsISupports))
  75.       throw Components.results.NS_ERROR_NO_INTERFACE;
  76.     return this;
  77.   }
  78. };
  79.  
  80. /***********************************************************
  81. class factory
  82.  
  83. This object is a member of the global-scope Components.classes.
  84. It is keyed off of the contract ID. Eg:
  85.  
  86. mySharedObject = Components.classes["@dietrich.ganx4.com/SharedObject;1"].
  87.                           createInstance(Components.interfaces.nsISharedObject);
  88.  
  89. ***********************************************************/
  90. var SharedObjectFactory = {
  91.   createInstance: function (aOuter, aIID)
  92.   {
  93.     if (aOuter != null)
  94.       throw Components.results.NS_ERROR_NO_AGGREGATION;
  95.     return (new SharedObject()).QueryInterface(aIID);
  96.   }
  97. };
  98.  
  99. /***********************************************************
  100. module definition (xpcom registration)
  101. ***********************************************************/
  102. var SharedObjectModule = {
  103.   registerSelf: function(aCompMgr, aFileSpec, aLocation, aType)
  104.   {
  105.     aCompMgr = aCompMgr.
  106.         QueryInterface(Components.interfaces.nsIComponentRegistrar);
  107.     aCompMgr.registerFactoryLocation(CLASS_ID, CLASS_NAME, 
  108.         CONTRACT_ID, aFileSpec, aLocation, aType);
  109.   },
  110.  
  111.   unregisterSelf: function(aCompMgr, aLocation, aType)
  112.   {
  113.     aCompMgr = aCompMgr.
  114.         QueryInterface(Components.interfaces.nsIComponentRegistrar);
  115.     aCompMgr.unregisterFactoryLocation(CLASS_ID, aLocation);        
  116.   },
  117.   
  118.   getClassObject: function(aCompMgr, aCID, aIID)
  119.   {
  120.     if (!aIID.equals(Components.interfaces.nsIFactory))
  121.       throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
  122.  
  123.     if (aCID.equals(CLASS_ID))
  124.       return SharedObjectFactory;
  125.  
  126.     throw Components.results.NS_ERROR_NO_INTERFACE;
  127.   },
  128.  
  129.   canUnload: function(aCompMgr) { return true; }
  130. };
  131.  
  132. /***********************************************************
  133. module initialization
  134.  
  135. When the application registers the component, this function
  136. is called.
  137. ***********************************************************/
  138. function NSGetModule(aCompMgr, aFileSpec) { return SharedObjectModule; }